const router = require('koa-router')()
const jwt = require('jsonwebtoken')
const WebChat = require('../controllers/users')

// const secret_key = '3zWi/.yp'


router.prefix('/users')

router.get('/', function (ctx, next) {
  ctx.body = 'this is a users response!'
})

// 注册用户
router.post('/register', async (ctx, next) => {
  // console.log(WebChat.register({...ctx.request.body}), 'WebChat')
  const data = await WebChat.register({...ctx.request.body})
  // console.log('data:', data)
  ctx.body = { data };
})

// 获取聊天记录
router.get('/getRecords', async (ctx, next) => {
  const data = await WebChat.getRecords({...ctx.query})
  ctx.body = data
})


/**
 * 1. 数据库查找用户，看是否匹配 account password
 * 2. 给用户设置cookie;   给一个内存对象，将用户已经找到的信息，放在这个session对象中，等下次进行匹配
 * 3. 等下次用户访问的时候，会自动携带cookie。
 * 4. 拿上这个cookie, 在后端匹配，如果在session中查找到用户已经登陆的状态，就说明，用户已经登陆，
 */

// 判断是否已经给这个用户设置过cookie了

// 需要数据库
// const session = {}; // 内存对象，用来存储用户已经登陆后的信息

// 中间件（函数）


const db = [
  {
    account: 'devin',
    password: '123'
  }
]

let needCookie = false;
// ctx.state.session 只能传递你用的路由。
let session = {}; // 重新设置一个对象。用来存储用户登陆后的信息
router.post('/login', async (ctx, next) => {
  const { account, password } = ctx.request.body;

  const logStatus = db.some(v => v.account === account && v.password === password)

  if (logStatus) {
    // 用户登陆成功之后，判断是否设置cookie
    if (!needCookie) {
      needCookie = true;
      ctx.cookies.set('userid', ctx.state.userID , {})
    }
    // 存在对象中；
    ctx.state.session[ctx.state.userID] = {account, password};
    // 因为ctx.state.会初始化，
    session = ctx.state.session;

    if (session[ctx.state.userID]?.account) {
      ctx.body = {
        msg: 'success',
        code: 0,
      }
    } else {
      ctx.body = {
        msg: 'fail',
        code: -1,
      }
    }
  } else {
    ctx.body = {
      msg: '账号密码错误',
      code: -1
    }
  }
})

router.get('/bar', function (ctx, next) {
  if (session[ctx.state.userID]?.account) {
    ctx.body =  {
      msg: '登陆成功'
    }
  } else {
    ctx.body = {
      msg: '请先登陆',
      ctx: ctx.state
    }
  }
})

router.get('/getRecound', async (ctx, next) => {
  if (session[ctx.state.userID]?.account) {
    ctx.body =  {
      msg: 'getRecound登陆成功'
    }
  } else {
    ctx.body = {
      msg: '请先登陆',
      ctx: session
    }
  }
})

module.exports = router
